/*!
 * \file UapStateMap.h
 * \brief State map UAP protocol in Serving Gateway
 */

#ifndef SGW_UAP_STATE_MAP_H
#define SGW_UAP_STATE_MAP_H

#include "UapStateConnectPend.h"
#include "UapStateConnected.h"
#include "UapStateMediaBearerSetupPend.h"
#include "UapStateMediaTransmission.h"

namespace tsc
{
namespace sgw
{

/**
 * State map for UAP protocol in Serving Gateway
 */
class UapStateMap
{
public:

	/**
	 * Returns singleton instance of the map
	 * \return an instance of the state map
	 */
	static UapStateMap& instance();

	UapStateBase* initialState() const;

	static UapStateConnectPend*          mStateConnPend;
	static UapStateConnected*            mStateConnected;
	static UapStateMediaBearerSetupPend* mStateMediaBearerSetupPend;
	static UapStateMediaTransmission*    mStateMediaTransmission;

private:

	UapStateMap();

	virtual ~UapStateMap();

};

} // namespace sgw
} // namespace tsc

#endif // SGW_UAP_STATE_MAP_H
